package services

import "github.com/sirupsen/logrus"

/*
//100	weekSwitch	//	星期开关     1字节8个位，1~7位分别代表星期一到星期日
//101	sprayLevel3	//	喷淋档位3    档（1字节）
//102	particleSize3	//	颗粒粗细3      %（1字节）
//103	startTime1	//	开启时间1   小时（1字节）
//104		//	开启时间1   分钟（1字节）
//105	sprayDuration1	//	喷淋时长1  分钟（1字节）
//106		//	喷淋时长1  秒（1字节）
//107	startTime2	//	开启时间2   小时（1字节）
//108		//	开启时间2   分钟（1字节）
//109	sprayDuration2	//	喷淋时长2  分钟（1字节）
//110		//	喷淋时长2  秒（1字节）
//111	startTime3	//	开启时间3   小时（1字节）
//112		//	开启时间3   分钟（1字节）
//113	sprayDuration3	//	喷淋时长3 分钟（1字节）
//114		//	喷淋时长3  秒（1字节）
//115	startTime4	//	开启时间4   小时（1字节）
//116		//	开启时间4   分钟（1字节）
//117	sprayDuration4	//	喷淋时长4  分钟（1字节）
//118		//	喷淋时长4  秒（1字节）
//119	startTime5	//	开启时间5   小时（1字节）
//120		//	开启时间5   分钟（1字节）
//121	sprayDuration5	//	喷淋时长5  分钟（1字节）
//122		//	喷淋时长5  秒（1字节）
*/
var SpkCtrlT2ParamsMap = map[string]DataRule{
	"weekSwitch":     {StartAddr: 100, Length: 1},
	"sprayLevel3":    {StartAddr: 101, Length: 1},
	"particleSize3":  {StartAddr: 102, Length: 1},
	"startTime1":     {StartAddr: 103, Length: 2},
	"sprayDuration1": {StartAddr: 105, Length: 2},
	"startTime2":     {StartAddr: 107, Length: 2},
	"sprayDuration2": {StartAddr: 109, Length: 2},
	"startTime3":     {StartAddr: 111, Length: 2},
	"sprayDuration3": {StartAddr: 113, Length: 2},
	"startTime4":     {StartAddr: 115, Length: 2},
	"sprayDuration4": {StartAddr: 117, Length: 2},
	"startTime5":     {StartAddr: 119, Length: 2},
	"sprayDuration5": {StartAddr: 121, Length: 2},
}

type SpkCtrlT2Params struct {
	WeekSwitch     uint8  `json:"weekSwitch"`
	SprayLevel3    uint8  `json:"sprayLevel3"`
	ParticleSize3  uint8  `json:"particleSize3"`
	StartTime1     string `json:"startTime1"`
	SprayDuration1 string `json:"sprayDuration1"`
	StartTime2     string `json:"startTime2"`
	SprayDuration2 string `json:"sprayDuration2"`
	StartTime3     string `json:"startTime3"`
	SprayDuration3 string `json:"sprayDuration3"`
	StartTime4     string `json:"startTime4"`
	SprayDuration4 string `json:"sprayDuration4"`
	StartTime5     string `json:"startTime5"`
	SprayDuration5 string `json:"sprayDuration5"`
}

// 喷淋控制器时间段2事件 method:SPK_CTRL_T1
type SpkCtrlT2Event struct {
	Method string          `json:"method"`
	Params SpkCtrlT2Params `json:"params"`
}

// 喷淋控制器时间段1命令组装并发送给设备
func AssembleSpkCtrlT2Payload(mac string, method string, params map[string]interface{}) error {
	var byteList []ByteData
	// 给params中的数据按照startAddr排序
	for k, v := range params {
		logrus.Info("k:", k, "v:", v)
		// 是否存在k
		if _, ok := SpkCtrlT2ParamsMap[k]; ok {
			byteList = append(byteList, ByteData{
				StartAddr: SpkCtrlT2ParamsMap[k].StartAddr,
				Length:    SpkCtrlT2ParamsMap[k].Length,
				Value:     v,
			})
		}
	}
	logrus.Info("未排序的byteList:", byteList)
	err := AssembleCommandPayloadByByteData(mac, method, byteList)
	return err
}
